/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef _AGENT_TASKREDO_FUNCCONTAINER_H_
#define _AGENT_TASKREDO_FUNCCONTAINER_H_

#include <map>
#include "taskmanager/Task.h"

typedef Task* (*RedoTaskNewFuncPtr)(const std::string&);
class TaskRedoFuncContainer {
public:
    static TaskRedoFuncContainer &GetInstance()
    {
        static TaskRedoFuncContainer TaskRedoFuncContainer;
        return TaskRedoFuncContainer;
    }

    RedoTaskNewFuncPtr GetFunc(const std::string& taskType)
    {
        if (taskMap.find(taskType) != taskMap.end()) {
            return taskMap[taskType];
        }

        return NULL;
    }

    void RegisterNewFunc(const std::string& taskType, RedoTaskNewFuncPtr newFunc)
    {
        taskMap.insert(std::pair<std::string, RedoTaskNewFuncPtr>(taskType, newFunc));
    }

private:
    std::map<std::string, RedoTaskNewFuncPtr> taskMap;
};

#endif